﻿Imports Actuariat
Imports PTIC_Util

Public Class initParametrage

    Protected _regleMin As RegleGenerique(Of Double).fonctionRegle = Function(x As Double) x >= 0
    Protected _regleMax As RegleGenerique(Of Double).fonctionRegle = Function(x As Double) x <= 100
    Protected _regleMax120 As RegleGenerique(Of Double).fonctionRegle = Function(x As Double) x <= 120
    Protected _regleMax12 As RegleGenerique(Of Double).fonctionRegle = Function(x As Double) x <= 12

    Protected listeTbleRef As DataTable
    Protected _controleurListeParametres As baseControleurListParametres
    Protected _modeleListeParametres As ParametresList

    Public Sub New(ByVal listeTablesRef As DataTable, _
                   ByVal controleurListeParametres As baseControleurListParametres, _
                   ByVal modeleListeParametres As ParametresList)
        Me.listeTbleRef = listeTablesRef
        _controleurListeParametres = controleurListeParametres
        _modeleListeParametres = modeleListeParametres
        init()
    End Sub

#Region "Création de la liste de paramètres et de ses contrôleurs"
    ''' <summary>
    ''' Initialisation de tous les paramètres
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub init()
        initTaxeAssu()
        initTx_TechA()
        initTx_RembAntiA()
        initTx_RendActifsA()
        initTx_TaxeImpoA()
        initTx_RendActionnairesA()
        initCoutEmprSubA()
        initTx_fraiGestA()
        initTx_CommiContA()
        initTx_CouvEmprSuboA()
        initTx_FondPropSurMSR()
        initTable_Mortalite_F()
        initAge_FinDC()
        initPres_GarantiePTIA()
        initTx_PrixGarantiePTIA()
        initTx_Majo_sinDCPTIA()
        initSel_medic()
        iniTble_maintien_incinv()
        initAge_FinINCINV()
        initFranchise_INCAP()
        initTx_abat_MalaNonObje()
        initTx_abat_ExclPerteRev()
        iniTx_MajoPrudSinINCINV()
        iniTx_chgtSecuINCINV()
        initTx_mensEntreeINCINV()
        initDuree_Actu()
        initTxNom_Actu()
        initTxMort_Actu()
        initTable_Mortalite_H()
        initTble_maintien_incinvFRA()
        initGrilleTarifaire()
        initTbleMaintienINCINV_Methode2()
    End Sub
    ''' <summary>
    ''' 0 - La taxe d'assurance
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTaxeAssu()
        Dim paramTx_TaxeAss As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_TaxeAssu, _
                                                                        csteParam.descTx_TaxeAssu, _
                                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_TaxeAss, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_TaxeAss.nom, New RegleGenerique(Of Double)(_regleMin, "La taxe d'assurance doit être supérieure à 0%"))
        _controleurListeParametres.addRegle(paramTx_TaxeAss.nom, New RegleGenerique(Of Double)(_regleMax, "La taxe d'assurance doit être inférieure à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_TaxeAssu, paramTx_TaxeAss)
    End Sub
    ''' <summary>
    ''' 1 - Le taux technique annuel
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_TechA()
        Dim paramTx_TechA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_TechA, _
                                                                        csteParam.descTx_TechA, _
                                                                        New Boolean() {True, True})
        'Création d'un contrôleur pour ce paramètre
        _controleurListeParametres.addTypedParametre(paramTx_TechA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_TechA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux technique annuel doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_TechA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux technique annuel être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_TechA, paramTx_TechA)
    End Sub
    ''' <summary>
    ''' 2 - Le taux de remboursement anticipés
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_RembAntiA()
        Dim paramTx_RembAntiA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_RembAntiA, _
                                                                csteParam.descTx_RembAntiA, _
                                                                New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_RembAntiA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_RembAntiA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux annuel de remboursements anticipés doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_RembAntiA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux annuel de remboursements anticipés être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_RembAntiA, paramTx_RembAntiA)
    End Sub
    ''' <summary>
    ''' 3 - Le taux de rendement attendu des actifs
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_RendActifsA()
        '3 - Le taux de rendement annuel des actifs
        Dim paramTx_RendActifsA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_RendActifsA, _
                                                                        csteParam.descTx_RendActifsA, _
                                                                        New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_RendActifsA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_RendActifsA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux annuel de rendement des actifs doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_RendActifsA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux annuel de rendement des actifs doit être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_RendActifsA, paramTx_RendActifsA)
    End Sub
    ''' <summary>
    ''' 4 - L'impôt sur les sociétés
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_TaxeImpoA()
        '4 - Le taux annuel d'imposition
        Dim paramTx_TaxeImpoA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_TaxeImpoA, _
                                                                          csteParam.descTx_TaxeImpoA, _
                                                                          New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_TaxeImpoA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_TaxeImpoA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux annuel d'imposition sur les sociétés doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_TaxeImpoA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux annuel d'imposition sur les sociétés doit être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_TaxeImpoA, paramTx_TaxeImpoA)
    End Sub
    ''' <summary>
    ''' 5 - Le taux de rendement annuel exigé par les actionnaires
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_RendActionnairesA()
        Dim paramTx_RendActionnairesA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_RendActionnairesA, _
                                                                        csteParam.descTx_RendActionnairesA, _
                                                                        New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_RendActionnairesA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_RendActionnairesA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux annuel de rendement exigé par les actionnaires doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_RendActionnairesA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux annuel de rendement exigé par les actionnaires doit être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_RendActionnairesA, paramTx_RendActionnairesA)
    End Sub
    ''' <summary>
    ''' 6 - Le coût annuel des emprunts subordonnés 
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initCoutEmprSubA()
        '6 - Le coût annuel des emprunts subordonnés
        Dim paramTx_CoutEmprSuboA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_CoutEmprSuboA, _
                                                                        csteParam.descTx_CoutEmprSuboA, _
                                                                        New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_CoutEmprSuboA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_CoutEmprSuboA.nom, New RegleGenerique(Of Double)(_regleMin, "Le coût annuel des emprunts subordonnés doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_CoutEmprSuboA.nom, New RegleGenerique(Of Double)(_regleMax, "Le coût annuel des emprunts subordonnés doit être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_CoutEmprSuboA, paramTx_CoutEmprSuboA)
    End Sub
    ''' <summary>
    ''' 7 - Les frais de gestion annuels
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_fraiGestA()
        Dim paramTx_fraiGestA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_fraiGestA, _
                                                                        csteParam.descTx_fraiGestA, _
                                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_fraiGestA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_fraiGestA.nom, New RegleGenerique(Of Double)(_regleMin, "Les frais de gestion annuels doivent être supérieurs à 0%"))
        _controleurListeParametres.addRegle(paramTx_fraiGestA.nom, New RegleGenerique(Of Double)(_regleMax, "Les frais de gestion annuels doivent être inférieurs à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_fraiGestA, paramTx_fraiGestA)
    End Sub
    ''' <summary>
    ''' 8 - La commission contractante
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_CommiContA()
        Dim paramTx_CommiContA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_CommiContA, _
                                                                        csteParam.descTx_CommiContA, _
                                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_CommiContA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_CommiContA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux garanti annuel doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_CommiContA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux garanti annuel doit être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_CommiContA, paramTx_CommiContA)
    End Sub
    ''' <summary>
    ''' 9 - Le taux de couverture des emprunts subordonnés
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_CouvEmprSuboA()
        Dim paramTx_CouvEmprSuboA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_CouvEmprSuboA, _
                                                                csteParam.descTx_CouvEmprSuboA, _
                                                                New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_CouvEmprSuboA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_CouvEmprSuboA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux de couverture des emprunts subordonnés doit être supérieur à 0%"))
        _controleurListeParametres.addRegle(paramTx_CouvEmprSuboA.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux de couverture des emprunts subordonnés doit être inférieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_CouvEmprSuboA, paramTx_CouvEmprSuboA)
    End Sub
    ''' <summary>
    ''' 10 - Le ratio fonds propres alloués / MSR
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_FondPropSurMSR()
        Dim paramTx_FondPropSurMSR As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_FondPropSurMSR, _
                                                        csteParam.descTx_FondPropSurMSR, _
                                                        New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_FondPropSurMSR, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_FondPropSurMSR.nom, New RegleGenerique(Of Double)(_regleMin, "Le ratio des fonds propres sur la marge de solvabilité réglementaire doit être supérieur à 0%"))
        _modeleListeParametres.Add(csteParam.nomTx_FondPropSurMSR, paramTx_FondPropSurMSR)
    End Sub
    ''' <summary>
    ''' 11 - Table de mortalité des femmes
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTable_Mortalite_F()
        Dim d As DataTable
        '11 - La table de mortalité retenue pour les femmes (contrainte sur les valeurs)
        'Filtre de la liste des tables du référentiel sur la garantie DC
        Dim foundRows() As DataRow = listeTbleRef.Select("strTypeTable='DC'")
        d = New DataTable("Correspondances Valeurs")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("val", GetType(String))
        For Each r As DataRow In foundRows
            d.Rows.Add(r("strNomTable"), r("strNomFichier"))
        Next
        Dim paramTable_Mortalite_F As New generiqueTypedParametreV2(Of String)(csteParam.nomTable_Mortalite_F, _
                                                                               csteParam.descTable_Mortalite_F, _
                                                                               New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTable_Mortalite_F, New fabriqueDefautCorrespDataTableControleur(d))
        _modeleListeParametres.Add(csteParam.nomTable_Mortalite_F, paramTable_Mortalite_F)
    End Sub
    ''' <summary>
    ''' 12 - Age de fin de la garantie décès (en années)
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initAge_FinDC()
        Dim paramAge_FinDC As New generiqueTypedParametreV2(Of Double)(csteParam.nomAge_FinDC, _
                                                                        csteParam.descAge_FinDC, _
                                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramAge_FinDC, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramAge_FinDC.nom, New RegleGenerique(Of Double)(_regleMin, "L'âge de fin de la garantie décès doit être supérieur à 0"))
        _controleurListeParametres.addRegle(paramAge_FinDC.nom, New RegleGenerique(Of Double)(_regleMax120, "L'âge de fin de la garantie décès doit être inférieur ou égal à 120"))
        _modeleListeParametres.Add(csteParam.nomAge_FinDC, paramAge_FinDC)

    End Sub
    ''' <summary>
    ''' 13 - Présence de la garantie PTIA
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initPres_GarantiePTIA()
        Dim d As New DataTable
        '13 - Présence de la garantie PTIA (contraintes : OUI / NON)
        'Création de la correspondance de valeurs
        d = New DataTable("Correspondances Valeurs")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("Val", GetType(Boolean))
        d.Rows.Add("OUI", True)
        d.Rows.Add("NON", False)
        Dim paramPres_GarantiePTIA As New generiqueTypedParametreV2(Of Boolean)(csteParam.nomPres_GarantiePTIA, _
                                                                               csteParam.descPres_GarantiePTIA, _
                                                                               New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramPres_GarantiePTIA, New fabriqueDefautCorrespDataTableControleur(d))
        _modeleListeParametres.Add(csteParam.nomPres_GarantiePTIA, paramPres_GarantiePTIA)
    End Sub
    ''' <summary>
    ''' 14 - Tarif de la garantie PTIA
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_PrixGarantiePTIA()
        '14 - Tarif PTIA (en % du décès)
        Dim paramTx_PrixGarantiePTIA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_PrixGarantiePTIA, _
                                                                csteParam.descTx_PrixGarantiePTIA, _
                                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_PrixGarantiePTIA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_PrixGarantiePTIA.nom, New RegleGenerique(Of Double)(_regleMin, "Le prix de la garantie PTIA en pourcentage du prix de la garantie décès doit être supérieur à 0%"))
        _modeleListeParametres.Add(csteParam.nomTx_PrixGarantiePTIA, paramTx_PrixGarantiePTIA)
    End Sub
    ''' <summary>
    ''' 15 - Majoration prudentielle des montants de sinistres DC/PTIA
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_Majo_sinDCPTIA()
        Dim paramTx_Majo_sinDCPTIA As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_Majo_sinDCPTIA, _
                                                                csteParam.descTx_Majo_sinDCPTIA, _
                                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_Majo_sinDCPTIA, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_Majo_sinDCPTIA.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux de majoration prudentielle des sinistres DC/PTIA doit être supérieur ou égal à 0%"))
        _modeleListeParametres.Add(csteParam.nomTx_Majo_sinDCPTIA, paramTx_Majo_sinDCPTIA)
    End Sub
    ''' <summary>
    ''' 16 - Sélection médicale
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initSel_medic()
        Dim paramSelMedicale As New parametreSelectionMedicale(nomSel_medic, "Sélection médicale", New Boolean() {False, True})
        _controleurListeParametres.addParametreSelectionMedicale(paramSelMedicale)
        _controleurListeParametres.addRegle(paramSelMedicale.nom, New RegleGenerique(Of Double)(_regleMin, "L'abattement lié à la sélection médicale ne peut être inférieur à 0%"))
        _controleurListeParametres.addRegle(paramSelMedicale.nom, New RegleGenerique(Of Double)(_regleMax, "L'abattement lié à la sélection médicale doit être supérieur à 100%"))
        _modeleListeParametres.Add(csteParam.nomSel_medic, paramSelMedicale)
    End Sub
    ''' <summary>
    ''' 17 - Table de maintien en incapacité/invalidité
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub iniTble_maintien_incinv()
        Dim d As DataTable
        d = New DataTable("Correspondances Valeurs")
        Dim foundRows As DataRow() = listeTbleRef.Select("strTypeTable='MAINTINCINV'")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("val", GetType(String))
        For Each r As DataRow In foundRows
            d.Rows.Add(r("strNomTable"), r("strNomFichier"))
        Next
        Dim paramTble_maintien_incinv As New generiqueTypedParametreV2(Of String)(csteParam.nomTble_maintien_incinv, _
                                                                                  csteParam.descTble_maintien_incinv, _
                                                                                  New Boolean() {True, False})
        _controleurListeParametres.addTypedParametre(paramTble_maintien_incinv, New fabriqueDefautCorrespDataTableControleur(d))
        _modeleListeParametres.Add(csteParam.nomTble_maintien_incinv, paramTble_maintien_incinv)
    End Sub
    ''' <summary>
    ''' 18 - Age de fin des garanties INCAP / INVAL
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initAge_FinINCINV()

        Dim paramAge_FinINCINV As New generiqueTypedParametreV2(Of Double)(csteParam.nomAge_FinINCINV, _
                                                                csteParam.descAge_FinINCINV, _
                                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramAge_FinINCINV, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramAge_FinINCINV.nom, New RegleGenerique(Of Double)(_regleMin, "L'âge de fin de la garantie INCAP/INVAL doit être supérieur à 0"))
        _controleurListeParametres.addRegle(paramAge_FinINCINV.nom, New RegleGenerique(Of Double)(_regleMax120, "L'âge de fin de la garantie INCAP/INVAL doit être inférieur ou égal à 120"))
        _modeleListeParametres.Add(csteParam.nomAge_FinINCINV, paramAge_FinINCINV)
    End Sub
    ''' <summary>
    ''' 19 - Franchise INCAP (en nombre de jours)
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initFranchise_INCAP()
        Dim paramfranchise_INCAP As New generiqueTypedParametreV2(Of Double)(csteParam.nomfranchise_INCAP, _
                                                        csteParam.descfranchise_INCAP, _
                                                        New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramfranchise_INCAP, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.setValeurUniqueFromValeurAffichee(paramfranchise_INCAP.nom, "3")
        _controleurListeParametres.addRegle(paramfranchise_INCAP.nom, New RegleGenerique(Of Double)(_regleMin, "Le nombre de mois de franchise de la garantie INCAP/INVAL doit être supérieur ou égal à 0"))
        _controleurListeParametres.addRegle(paramfranchise_INCAP.nom, New RegleGenerique(Of Double)(_regleMax12, "Le nombre de mois de franchise de la garantie INCAP/INVAL doit être inférieur ou égal à 12"))
        _modeleListeParametres.Add(csteParam.nomfranchise_INCAP, paramfranchise_INCAP)
    End Sub
    ''' <summary>
    ''' 20 - Abattement exclusion Maladies Non Objectivables
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_abat_MalaNonObje()

        Dim paramTx_abat_MalaNonObje As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_abat_MalaNonObje, _
                                                        csteParam.descTx_abat_MalaNonObje, _
                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_abat_MalaNonObje, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_abat_MalaNonObje.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux d'abattement lié à l'exclusion des maladies non objectivables de la garantie INCAP/INVAL doit être supérieur ou égal à 0"))
        _controleurListeParametres.addRegle(paramTx_abat_MalaNonObje.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux d'abattement lié à l'exclusion des maladies non objectivables de la garantie INCAP/INVAL doit être inférieur ou égal à 100"))
        _modeleListeParametres.Add(csteParam.nomTx_abat_MalaNonObje, paramTx_abat_MalaNonObje)

    End Sub
    ''' <summary>
    ''' 21 - Abattement exclusion Perte de revenus
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_abat_ExclPerteRev()

        Dim paramTx_abat_ExclPerteRev As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_abat_ExclPerteRev, _
                                                        csteParam.descTx_abat_ExclPerteRev, _
                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_abat_ExclPerteRev, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_abat_ExclPerteRev.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux d'abattement lié à la clause sur la perte de revenus de la garantie INCAP/INVAL doit être supérieur ou égal à 0"))
        _controleurListeParametres.addRegle(paramTx_abat_ExclPerteRev.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux d'abattement lié à la clause sur la perte de revenus de la garantie INCAP/INVAL doit être inférieur ou égal à 100"))
        _modeleListeParametres.Add(csteParam.nomTx_abat_ExclPerteRev, paramTx_abat_ExclPerteRev)

    End Sub
    ''' <summary>
    ''' 22 - Majoration prudentielle des montants de sinistre incapacité / invalidité
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub iniTx_MajoPrudSinINCINV()

        Dim paramTx_MajoPrudSinINCINV As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_MajoPrudSinINCINV, _
                                                        csteParam.descTx_MajoPrudSinINCINV, _
                                                        New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTx_MajoPrudSinINCINV, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_MajoPrudSinINCINV.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux de majoration prudentielle des sinistres INCAP/INVAL liée aux fluctuation de la sinistralité doit être supérieur ou égal à 0%"))
        _controleurListeParametres.addRegle(paramTx_MajoPrudSinINCINV.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux de majoration prudentielle des sinistres INCAP/INVAL liée aux fluctuation de la sinistralité doit être inférieur ou égal à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_MajoPrudSinINCINV, paramTx_MajoPrudSinINCINV)

    End Sub
    ''' <summary>
    ''' 23 - Chargement de sécurité lié aux incertitudes sur la table INCAP / INVAL
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub iniTx_chgtSecuINCINV()
        Dim paramTx_chgtSecuINCINV As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_chgtSecuINCINV, _
                                                        csteParam.descTx_chgtSecuINCINV, _
                                                        New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_chgtSecuINCINV, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_chgtSecuINCINV.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux de chargement prudentiel des sinistres INCAP/INVAL liée aux incertitudes sur les tables de maintien en sinistre doit être supérieur ou égal à 0%"))
        _controleurListeParametres.addRegle(paramTx_chgtSecuINCINV.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux de chargement prudentielle des sinistres INCAP/INVAL liée aux incertitudes sur les tables de maintien en sinistre doit être inférieur ou égal à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_chgtSecuINCINV, paramTx_chgtSecuINCINV)
    End Sub
    ''' <summary>
    ''' 24 - Taux mensuel d'entrée en incapacité / invalidité à 0 jours
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTx_mensEntreeINCINV()
        Dim paramTx_mensEntreeINCINV As New generiqueTypedParametreV2(Of Double)(csteParam.nomTx_mensEntreeINCINV, _
                                                csteParam.descTx_mensEntreeINCINV, _
                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTx_mensEntreeINCINV, New fabriqueDefautNoCorrespControleur())
        _controleurListeParametres.addRegle(paramTx_mensEntreeINCINV.nom, New RegleGenerique(Of Double)(_regleMin, "Le taux d'entrée mensuel en INCAP/INVAL doit être supérieur ou égal à 0%"))
        _controleurListeParametres.addRegle(paramTx_mensEntreeINCINV.nom, New RegleGenerique(Of Double)(_regleMax, "Le taux d'entrée mensuel en INCAP/INVAL doit être inférieur ou égal à 100%"))
        _modeleListeParametres.Add(csteParam.nomTx_mensEntreeINCINV, paramTx_mensEntreeINCINV)
    End Sub
    ''' <summary>
    ''' 25 - La durée actuarielle
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub initDuree_Actu()
        Dim paramDuree_Actu As New generiqueTypedParametreV2(Of Double)(nomDuree_Actu, _
                                                descDuree_Actu, _
                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramDuree_Actu, New fabriqueDefautNoCorrespControleur())
        _modeleListeParametres.Add(nomDuree_Actu, paramDuree_Actu)
    End Sub
    ''' <summary>
    ''' 26 - Le taux nominal actuariel
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub initTxNom_Actu()
        Dim paramTxNom_Actu As New generiqueTypedParametreV2(Of Double)(nomTxNom_Actu, _
                                                descTxNom_Actu, _
                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTxNom_Actu, New fabriqueDefautNoCorrespControleur())
        _modeleListeParametres.Add(nomTxNom_Actu, paramTxNom_Actu)
    End Sub
    ''' <summary>
    ''' 27 - Les taux de mortalité actuariels
    ''' </summary>
    ''' <remarks></remarks>
    Protected Sub initTxMort_Actu()
        Dim paramTxMort_Actu As New generiqueTypedParametreV2(Of Double)(nomTxMort_Actu, _
                                                descTxMort_Actu, _
                                                New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTxMort_Actu, New fabriqueDefautNoCorrespControleur())
        _modeleListeParametres.Add(nomTxMort_Actu, paramTxMort_Actu)
    End Sub
    '28 - La table de mortalité retenue pour les femmes (contrainte sur les valeurs)
    'Filtre de la liste des tables du référentiel sur la garantie DC
    Protected Sub initTable_Mortalite_H()

        Dim d As DataTable
        '11 - La table de mortalité retenue pour les femmes (contrainte sur les valeurs)
        'Filtre de la liste des tables du référentiel sur la garantie DC
        Dim foundRows() As DataRow = listeTbleRef.Select("strTypeTable='DC'")
        d = New DataTable("Correspondances Valeurs")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("val", GetType(String))
        For Each r As DataRow In foundRows
            d.Rows.Add(r("strNomTable"), r("strNomFichier"))
        Next
        Dim paramTable_Mortalite_H As New generiqueTypedParametreV2(Of String)(csteParam.nomTable_Mortalite_H, _
                                                                               csteParam.descTable_Mortalite_H, _
                                                                               New Boolean() {True, True})
        _controleurListeParametres.addTypedParametre(paramTable_Mortalite_H, New fabriqueDefautCorrespDataTableControleur(d))
        _modeleListeParametres.Add(csteParam.nomTable_Mortalite_H, paramTable_Mortalite_H)

    End Sub
    ''' <summary>
    ''' 29 - Abattements sur les taux de maintien incapacité/invalidité liés à la franchise
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub initTble_maintien_incinvFRA()
        'Création de la table destinée à accueillir les valeurs
        Dim d As DataTable
        d = New DataTable("Correspondances Valeurs")
        Dim foundRows As DataRow() = listeTbleRef.Select("strTypeTable='FRAINCINV'")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("val", GetType(String))
        For Each r As DataRow In foundRows
            d.Rows.Add(r("strNomTable"), r("strNomFichier"))
        Next

        Dim paramTble_maintien_incinvFRA As generiqueTypedParametreV2(Of String) = _
                New generiqueTypedParametreV2(Of String)(csteParam.nomtble_maintien_incinvFRA, _
                                                         csteParam.desctble_maintien_incinvFRA, _
                                                         New Boolean() {True, True})
        _modeleListeParametres.Add(paramTble_maintien_incinvFRA.nom, paramTble_maintien_incinvFRA)
        _controleurListeParametres.addTypedParametre(paramTble_maintien_incinvFRA, _
                                                     New fabriqueDefautCorrespDataTableControleur(d))

        _controleurListeParametres.setValeurUniqueFromValeurAffichee(csteParam.nomtble_maintien_incinvFRA, "abatFra_INCINV_90 - CNP")
    End Sub
    ''' <summary>
    ''' 30 - Grille tarifaire
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub initGrilleTarifaire()
        Dim d As DataTable
        Dim foundRows() As DataRow
        d = New DataTable("Correspondances Valeurs")
        foundRows = listeTbleRef.Select("strTypeTable='TARIF'")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("val", GetType(String))
        For Each r As DataRow In foundRows
            d.Rows.Add(r("strNomTable"), r("strNomFichier"))
        Next

        Dim paramGrilleTarifaire As generiqueTypedParametreV2(Of String) = _
                New generiqueTypedParametreV2(Of String)(csteParam.nomGrilleTarifaire, _
                                                         csteParam.descGrilleTarifaire, _
                                                         New Boolean() {True, True})
        _modeleListeParametres.Add(paramGrilleTarifaire.nom, paramGrilleTarifaire)
        _controleurListeParametres.addTypedParametre(paramGrilleTarifaire, _
                                                     New fabriqueDefautCorrespDataTableControleur(d))

    End Sub
    ''' <summary>
    ''' 31 - Maintien en INCAP/INVAL - modèle 2
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub initTbleMaintienINCINV_Methode2()
        Dim d As DataTable
        d = New DataTable("Correspondances Valeurs")
        Dim foundRows As DataRow() = listeTbleRef.Select("strTypeTable='MAINTINCINV_NB_MENS'")
        d.Columns.Add("valAff", GetType(String))
        d.Columns.Add("val", GetType(String))
        For Each r As DataRow In foundRows
            d.Rows.Add(r("strNomTable"), r("strNomFichier"))
        Next
        Dim paramTble_maintien_incinvM2 As New generiqueTypedParametreV2(Of String)(csteParam.nomTble_maintien_incinvM2, _
                                                                                  csteParam.descTble_maintien_incinvM2, _
                                                                                  New Boolean() {False, True})
        _controleurListeParametres.addTypedParametre(paramTble_maintien_incinvM2, New fabriqueDefautCorrespDataTableControleur(d))
        _modeleListeParametres.Add(csteParam.nomTble_maintien_incinvM2, paramTble_maintien_incinvM2)

    End Sub
#End Region

End Class
